package cn.echase.ecare.yinfayun.domain.vo;

import cn.echase.ecare.yinfayun.domain.entity.AssessInfo;
import cn.echase.ecare.yinfayun.utils.TransUtil;
import cn.hutool.core.util.ObjUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;

/**
 * 评估信息返回vo
 *
 * @author hanpeng
 * @date 2024-09-30 14:22:42
 */
@Data
@AutoMapper(target = AssessInfo.class)
public class AssessInfoVo implements Serializable {

    private Integer id;
    /**
     * 评估信息id
     */
    private String ucId;
    /**
     * 评估编号
     */
    private String assessNo;
    /**
     * 机构id
     */
    private String tenantId;
    /**
     * 长者id
     */
    private String eldId;
    /**
     * 评估的长者的类型 0 在院长者 1居家 2 入住登记 3 预约长者 4 其他长者
     */
    private Integer eldType;
    /**
     * 长者姓名
     */
    private String eldName;
    /**
     * 长者性别 0未填写 1 男 2 女
     */
    private Integer eldSex;
    private Integer age;
    /**
     * 长者证件类型 0 居民身份证 1 港澳居民来往内地通行证 2 台湾居民来往大陆通行证 3 其他法定有效证件
     */
    private String eldIdType;
    /**
     * 长者身份证号
     */
    private String eldIdNumber;
    /**
     * 长者床位
     */
    private String bedId;
    /**
     * 长者床位名称(主楼-1楼-101-01)
     */
    private String bedName;
    /**
     * 积木报表的id
     */
    private String reportId;
    //评估模板id
    private String templateId;
    //评估模板名称
    private String templateName;
    //评估模板分类id
    private String templateCategoryId;
    //评估模板分类名称
    private String templateCategoryName;
    //评估人员1ID
    private String assessorOne;
    //评估人员1姓名
    private String assessorOneName;
    //评估人员2ID
    private String assessorTwo;
    //评估人员2姓名
    private String assessorTwoName;
    //评估地点
    private String assessAddress;
    //长者能力最终等级
    private String ultimateAbilityLevel;
    //评估状态：1: 未完成 2：已完成
    private Integer assessStatus;
    //评估结果
    private String assessResult;
    //评估结果 json 数据
    private String resultJson;
    //评估日期
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate assessDate;
    /**
     * 评估类型 1：首次评估  2：常规评估  3.即时评估  4：复评 5:其他
     */
    private Integer assessType;
    /**
     * 评估类型 中文
     */
    private String assessTypeName;
    // -------------------  长者的附加信息
    /**
     * 身高 cm
     */
    private Integer height;
    /**
     * 体重 kg
     */
    private Float weight;
    /**
     * 居住情况
     */
    private List<Integer> livingConditionOrg;
    /**
     * 经济来源 1、退休金/养老金 2、子女补贴 3、亲友资助 4、国家普惠型补贴 5、个人储蓄 6、其他补贴
     */
    private List<Integer> economicSources;
    /**
     * 公历生日
     */
    @JsonFormat(pattern = "yyyy/MM/dd", timezone = "GMT+8")
    private LocalDate birthDate;
    /**
     * 农历生日
     */
    private String lunarBirthDate;
    /**
     * 生日习惯：0：公历，1：农历
     */
    private Integer birthDateHabit;

    /**
     * 民族 0 汉族 1 少数民族 2 外国血统中国籍人士 3 其他
     */
    private Integer nation;
    /**
     * 籍贯
     * 1、北京市、2、上海市、3、江苏省、4、浙江省、5、安徽省、6、福建省、7、江西省、8、山东省、9、河南省、10、湖北省、11、天津市、
     * 12、吉林省、13、黑龙江省、14、湖南省、15、广东省、16、广西壮族自治区、17、山西省、18、海南省、19、重庆市、20、四川省、
     * 21、贵州省、22、云南省、23、陕西省、24、甘肃省、25、青海省、26、宁夏回族自治区、27、新疆维吾尔自治区、28、台湾省、29、香港特别行政区、
     * 30、澳门特别行政区、31、河北省、32、内蒙古自治区、33、辽宁省、34、西藏自治区
     */
    private Integer nativePlace;
    // 籍贯的中文
    private String nativePlaceName;
    /**
     * 宗教信仰 1无、2基督教、3伊斯兰教、4佛教、5道教、6其他
     */
    private Integer religion;
    /**
     * 婚姻状况
     */
    private Integer maritalStatus;
    /**
     * 医疗费用支付 1、城镇职工基本医疗保险 2、自费 3、城乡居民基本医疗保险 4、公务员补助 5、公费医疗及医疗照顾对象 6、大病保险 7、医疗救助 8、企业补充医疗保险
     */
    private Integer medicalPayment;
    /**
     * 最高学历
     */
    private Integer highestDegree;
    /**
     * 医疗保险类型
     */
    private Integer medicalInsuranceCategory;
    /**
     * 医保/社保卡号
     */
    private String socialSecurityNumber;

    private String assessType1;

    private String assessType2;

    private String assessType3;

    private String assessType4;

    private String assessType5;

    public void transBirthDate(){
        if (ObjUtil.isEmpty(this.getBirthDate())){
            LocalDate birthDateFromId = TransUtil.getBirthDateFromId(this.getEldIdType(), this.getEldIdNumber());
            this.setBirthDate(birthDateFromId);
        }
    }

    public void transAge(){
        if (ObjUtil.isEmpty(this.getAge())){
            Integer ageFromId = TransUtil.getAgeFromId(this.getEldIdType(), this.getEldIdNumber());
            this.setAge(ageFromId);
        }
    }

    public void transSex(){
        if (ObjUtil.isEmpty(this.getEldSex())){
            Integer sexFromId = TransUtil.getSexFromId(this.getEldIdType(), this.getEldIdNumber());
            this.setEldSex(sexFromId);
        }
    }

}
